home *** CD-ROM | disk | FTP | other *** search
/ Developer CD Series 1997 July: Mac OS SDK / Dev.CD Jul 97 SDK1.toast / Development Kits (Disc 1) / Interfaces&Libraries / Interfaces / CIncludes / PCI.h < prev    next >
Encoding:
C/C++ Source or Header  |  1996-05-05  |  5.3 KB  |  150 lines  |  [TEXT/MPS ]

  1. /*
  2.      File:        PCI.h
  3.  
  4.      Contains:    Access Routines to PCI Config and I/O registers
  5.  
  6.      Version:    Technology:    PowerSurge 1.0.2.
  7.                  Package:    Universal Interfaces 2.1.3
  8.  
  9.      Copyright:    © 1984-1996 by Apple Computer, Inc.
  10.                  All rights reserved.
  11.  
  12.      Bugs?:        If you find a problem with this file, use the Apple Bug Reporter
  13.                  stack.  Include the file and version information (from above)
  14.                  in the problem description and send to:
  15.                      Internet:    apple.bugs@applelink.apple.com
  16.                      AppleLink:    APPLE.BUGS
  17.  
  18. */
  19.  
  20. #ifndef __PCI__
  21. #define __PCI__
  22.  
  23.  
  24. #ifndef __TYPES__
  25. #include <Types.h>
  26. #endif
  27. /*    #include <ConditionalMacros.h>                                */
  28.  
  29. #ifndef __NAMEREGISTRY__
  30. #include <NameRegistry.h>
  31. #endif
  32.  
  33. #ifdef __cplusplus
  34. extern "C" {
  35. #endif
  36.  
  37. #if PRAGMA_ALIGN_SUPPORTED
  38. #pragma options align=mac68k
  39. #endif
  40.  
  41. #if PRAGMA_IMPORT_SUPPORTED
  42. #pragma import on
  43. #endif
  44.  
  45. #define kPCIAssignedAddressProperty "assigned-addresses"
  46.  
  47. enum {
  48.     kPCIRelocatableSpace        = 0x80,
  49.     kPCIPrefetchableSpace        = 0x40,
  50.     kPCIAliasedSpace            = 0x20,
  51.     kPCIAddressTypeCodeMask        = 0x03,
  52.     kPCIConfigSpace                = 0,
  53.     kPCIIOSpace                    = 1,
  54.     kPCI32BitMemorySpace        = 2,
  55.     kPCI64BitMemorySpace        = 3
  56. };
  57.  
  58. typedef UInt8 PCIAddressSpaceFlags;
  59.  
  60.  
  61. enum {
  62.     kPCIDeviceNumberMask        = 0x1F,
  63.     kPCIFunctionNumberMask        = 0x07
  64. };
  65.  
  66. typedef UInt8 PCIDeviceFunction;
  67.  
  68. typedef UInt8 PCIBusNumber;
  69.  
  70. typedef UInt8 PCIRegisterNumber;
  71.  
  72. struct PCIAssignedAddress {
  73.     PCIAddressSpaceFlags            addressSpaceFlags;
  74.     PCIBusNumber                    busNumber;
  75.     PCIDeviceFunction                deviceFunctionNumber;
  76.     PCIRegisterNumber                registerNumber;
  77.     UnsignedWide                    address;
  78.     UnsignedWide                    size;
  79. };
  80. typedef struct PCIAssignedAddress PCIAssignedAddress, *PCIAssignedAddressPtr;
  81.  
  82. #define GetPCIIsRelocatable( AssignedAddressPtr )        ((AssignedAddressPtr)->addressSpaceFlags & kPCIRelocatableSpace)
  83. #define GetPCIIsPrefetchable( AssignedAddressPtr )        ((AssignedAddressPtr)->addressSpaceFlags & kPCIPrefetchableSpace)
  84. #define GetPCIIsAliased( AssignedAddressPtr )            ((AssignedAddressPtr)->addressSpaceFlags & kPCIAliasedSpace)
  85. #define GetPCIAddressSpaceType( AssignedAddressPtr )    ((AssignedAddressPtr)->addressSpaceFlags & kPCIAddressTypeCodeMask)
  86. #define GetPCIBusNumber( AssignedAddressPtr )            ((AssignedAddressPtr)->busNumber)
  87. #define GetPCIDeviceNumber( AssignedAddressPtr )        (((AssignedAddressPtr)->deviceFunctionNumber >> 3) & kPCIDeviceNumberMask)
  88. #define GetPCIFunctionNumber( AssignedAddressPtr )        ((AssignedAddressPtr)->deviceFunctionNumber & kPCIFunctionNumberMask)
  89. #define GetPCIRegisterNumber( AssignedAddressPtr )        ((AssignedAddressPtr)->registerNumber)
  90.  
  91. #if !GENERATINGCFM
  92. #pragma parameter __D0 EndianSwap16Bit(__D0)
  93. #endif
  94. extern pascal UInt16 EndianSwap16Bit(UInt16 data16)
  95.  ONEWORDINLINE(0xE158);
  96.  
  97. #if !GENERATINGCFM
  98. #pragma parameter __D0 EndianSwap32Bit(__D0)
  99. #endif
  100. extern pascal UInt32 EndianSwap32Bit(UInt32 data32)
  101.  THREEWORDINLINE(0xE158, 0x4840, 0xE158);
  102. extern pascal OSErr ExpMgrConfigReadByte(RegEntryIDPtr node, LogicalAddress configAddr, UInt8 *valuePtr)
  103.  THREEWORDINLINE(0x303C, 0x0620, 0xAAF3);
  104. extern pascal OSErr ExpMgrConfigReadWord(RegEntryIDPtr node, LogicalAddress configAddr, UInt16 *valuePtr)
  105.  THREEWORDINLINE(0x303C, 0x0621, 0xAAF3);
  106. extern pascal OSErr ExpMgrConfigReadLong(RegEntryIDPtr node, LogicalAddress configAddr, UInt32 *valuePtr)
  107.  THREEWORDINLINE(0x303C, 0x0622, 0xAAF3);
  108. extern pascal OSErr ExpMgrConfigWriteByte(RegEntryIDPtr node, LogicalAddress configAddr, UInt8 value)
  109.  THREEWORDINLINE(0x303C, 0x0523, 0xAAF3);
  110. extern pascal OSErr ExpMgrConfigWriteWord(RegEntryIDPtr node, LogicalAddress configAddr, UInt16 value)
  111.  THREEWORDINLINE(0x303C, 0x0524, 0xAAF3);
  112. extern pascal OSErr ExpMgrConfigWriteLong(RegEntryIDPtr node, LogicalAddress configAddr, UInt32 value)
  113.  THREEWORDINLINE(0x303C, 0x0625, 0xAAF3);
  114. extern pascal OSErr ExpMgrIOReadByte(RegEntryIDPtr node, LogicalAddress ioAddr, UInt8 *valuePtr)
  115.  THREEWORDINLINE(0x303C, 0x0626, 0xAAF3);
  116. extern pascal OSErr ExpMgrIOReadWord(RegEntryIDPtr node, LogicalAddress ioAddr, UInt16 *valuePtr)
  117.  THREEWORDINLINE(0x303C, 0x0627, 0xAAF3);
  118. extern pascal OSErr ExpMgrIOReadLong(RegEntryIDPtr node, LogicalAddress ioAddr, UInt32 *valuePtr)
  119.  THREEWORDINLINE(0x303C, 0x0628, 0xAAF3);
  120. extern pascal OSErr ExpMgrIOWriteByte(RegEntryIDPtr node, LogicalAddress ioAddr, UInt8 value)
  121.  THREEWORDINLINE(0x303C, 0x0529, 0xAAF3);
  122. extern pascal OSErr ExpMgrIOWriteWord(RegEntryIDPtr node, LogicalAddress ioAddr, UInt16 value)
  123.  THREEWORDINLINE(0x303C, 0x052A, 0xAAF3);
  124. extern pascal OSErr ExpMgrIOWriteLong(RegEntryIDPtr node, LogicalAddress ioAddr, UInt32 value)
  125.  THREEWORDINLINE(0x303C, 0x062B, 0xAAF3);
  126. extern pascal OSErr ExpMgrInterruptAcknowledgeReadByte(RegEntryIDPtr entry, UInt8 *valuePtr)
  127.  THREEWORDINLINE(0x303C, 0x0411, 0xAAF3);
  128. extern pascal OSErr ExpMgrInterruptAcknowledgeReadWord(RegEntryIDPtr entry, UInt16 *valuePtr)
  129.  THREEWORDINLINE(0x303C, 0x0412, 0xAAF3);
  130. extern pascal OSErr ExpMgrInterruptAcknowledgeReadLong(RegEntryIDPtr entry, UInt32 *valuePtr)
  131.  THREEWORDINLINE(0x303C, 0x0413, 0xAAF3);
  132. extern pascal OSErr ExpMgrSpecialCycleWriteLong(RegEntryIDPtr entry, UInt32 value)
  133.  THREEWORDINLINE(0x303C, 0x0419, 0xAAF3);
  134. extern pascal OSErr ExpMgrSpecialCycleBroadcastLong(UInt32 value)
  135.  THREEWORDINLINE(0x303C, 0x021A, 0xAAF3);
  136.  
  137. #if PRAGMA_IMPORT_SUPPORTED
  138. #pragma import off
  139. #endif
  140.  
  141. #if PRAGMA_ALIGN_SUPPORTED
  142. #pragma options align=reset
  143. #endif
  144.  
  145. #ifdef __cplusplus
  146. }
  147. #endif
  148.  
  149. #endif /* __PCI__ */
  150.